package baseitems
{
	import CSprite;
	import flash.filters.GlowFilter;
	import property.Align;
	import property.Padding;
	
	/**
	 * базовый компонент пускай тут будут все настройки
	 * @author yaempechenki@gmail.com
	 */
	public class Base extends CSprite 
	{
        /**
         * PROPERTY=========================================
         */
        // в далеком будущем все свойства будут в проперти листе
        // private var _settings:PropertyList; extende property emplements ipoperty
        // есть мысль что базовый объект всетаки должен уметь рисовать у себя бэкграунд.
        // тaскалки и ресайз похоже нужны будут только для Rect объекта
        public var id:int;						// айди, не повторяется
        public var posAlign:Align;				// алайн чилда относительно предка
        private var _anchor:Align;			    // алайн чилда внутри самого себя
        private var _name:String;				// имя, если не установлено - возвращаем дефолтное тип+ид
		public var type:String;					// тип, строковый пока
		public var selfParent:Base;				// предок
		public var percentWidth:int;			// брать ширину родителя в процентах
		public var percentHeight:int;			// брать высоту родителя в процентах
		public var percentWidthEnabled:Boolean; // процент ширины от родителя
		public var percentHeightEnabled:Boolean;// процент высоты от родителя
		public var wstack:Boolean;				// стекать по вертикали 
		public var hstack:Boolean;				// стекать по горизонтали
		public var copySize:Boolean;			// копировать предку размер сумм его детей
		public var stackAlign:Align;			// алайн внутри стекового контейнера если не выбран кописайз
		public var padding:Padding;				// отступ с внешних сторон
		public var labelAlign:Align;			// текстовые алайны
		public var textFieldSize:int;			// размер текста для текстового поля
		
        /**
         * END PROPERTY======================================
         */

		private var _container:Sprite;
		private var glowFilter:GlowFilter; 
		public function Base(id:int, type:String) 
		{
			
			this.id = id;
			this.type = type;
			
			_container = new Sprite();
			addChild(_container);
			glowFilter = new GlowFilter(0xFFFFFF, 1, 7, 7, 3);
			initDefaultProperies();
		}
		
		private function initDefaultProperies():void {
			posAlign = Align.BOTTOM_LEFT;
			anchor = Align.BOTTOM_LEFT;
			selfParent = null;
			percentWidthEnabled = false;
			percentWidth = 100;
			percentHeightEnabled = false;
			percentHeight = 100; 
			wstack = false;
			hstack = true;
			copySize = false;
			stackAlign = Align.MIDDLE;
			padding = new Padding(0, 0, 0, 0);
			labelAlign = Align.MIDDLE;
			textFieldSize = 12;
		}
		
		public function set selected(value:Boolean):void {
			if (value) {
				glowFilter.color = Math.random() * 0xFFFFFF;
				this.filters = [glowFilter];
			} else {
				this.filters = null;
			}
		}
		
		public function setPosition(xx:int, yy:int):void {
			this.x = xx;
			this.y = yy;
		}
		
		public function get container():Sprite {
			return _container;
		}
		
		override public function get name():String {
			if (_name) {
				return _name;
			}
			return type + "" + id;
		}

        override public function set name(value:String):void {
			_name = value;
		}
		
		public function get anchor():Align {
			return _anchor;
		}
		
		public function refresh():void {
			anchor = _anchor;
		}
		
		public function set anchor(align:Align):void {
			this._anchor = align;
			
			if (align == Align.TOP_LEFT) {
				container.x = 0;
				container.y = 0;
			}
			
			if (align == Align.MIDDLE_LEFT) {
				container.x = 0;
				container.y = -container.height/ 2;
			}
			
			if (align == Align.BOTTOM_LEFT) {
				container.x = 0;
				container.y = -container.height;
			}
			
			if (align == Align.MIDDLE_TOP) {
				container.x = -container.width / 2;
				container.y = 0;
			}
			
			if (align == Align.MIDDLE) {
				container.x = -container.width / 2;
				container.y = -container.height/ 2;
			}
			
			if (align == Align.MIDDLE_BOTTOM) {
				container.x = -container.width / 2;
				container.y = -container.height;
			}
			
			if (align == Align.TOP_RIGHT) {
				container.x = -container.width;
				container.y = 0;
			}
			
			if (align == Align.MIDDLE_RIGHT) {
				container.x = -container.width;
				container.y = -container.height/ 2;
			}
			
			if (align == Align.BOTTOM_RIGHT) {
				container.x = -container.width;
				container.y = -container.height;
			}
		}
	}
}